/***********************************************************************************
 * 文件名： suart_config.h
 * 版本： 2
 * 说明：
 * 	    soft_uart（SUart）配置文件。波特率 = 定时器中断频率 x 3 。
 * 修改记录：
 * 	2021/04/28: 初版。 刘言。
 *  2021/10/27：新增同步模式。黄均铭
 ***********************************************************************************/
#ifndef _SUART_CONFIG_H_
#define _SUART_CONFIG_H_

// 仅包含需要的文件，polsys驱动和组件接口不需要再包含头文件。
#include "..\bsp\hard_wire.h"

// 开启同步模式，死等结果
#define _SUART_SYNC_MODE
#ifdef _SUART_SYNC_MODE
// 延时1个时钟 100us 必须使用定时器，执行其他代码不影响延时
#define DELAY_1CKL                     \
    {                                  \
        while (Tim0_GetIntFlag() == 0) \
            ;                          \
        Tim0_Reload();                 \
        Tim0_ClrIntFlag();             \
    }
#endif

// 半双工模式，注释掉表示全双工模式
#define _SUART_HALF_DUPLEX

// 启用发送完毕事件通知，注释掉表示关闭
//#define _SUART_USE_TX_DONE_EVENT

// 设置一些需要引用的外部函数(驱动和组件接口不用再包含头文件)

// 管脚初始化，SUART初始化时被调用，注意 TX 管脚 默认输出逻辑应该为1，否则可能会导致第一个字节发送错误。
#define _SUart_InitPin() // 已在 bsp 中初始化

// 定时器初始化，SUART初始化时被调用，定时器中断频率的 1/3 就是波特率。
#define _SUart_InitTimer() // 已在 soft_pwm 组件中初始化(共用定时器)

// 获取RX脚的电平
#define _SUart_GetRxPin() UART_IO

// 设置TX脚的电平
#define _SUart_SetTxPin(level) UART_IO = level

// 半双工额外需要的切换接口
#ifdef _SUART_HALF_DUPLEX
// 切换成RX脚（输入模式）
#define _SUart_PinRxMode() UART_IO_INPUT_MODE
// 切换成TX脚（输出模式），注意确保切换后立即输出高电平，否则可能会导致第一个字节发送错误。
#define _SUart_PinTxMode() UART_IO_OUTPUT_MODE
#endif

#endif
